home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / LFSystemBinder / compagnons / LFRxDirect / LFRxDirect.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-21  |  2.9 KB  |  105 lines

  1. /*****************************************************************************
  2.  
  3.                         LFRxDirect.c
  4.  
  5.                         LF Soft 1993
  6.  
  7.     This SoftWare is a PUBLIC DOMAIN so you can made what you want with it.
  8.     Arexx routine come from CSH 5.19.
  9.  
  10.     As rxsend fonction of CSH is interne, you can't use it in backround.
  11.     LFRxDirect does the same thing but it can be started as backround task.
  12.  
  13.     Syntax :
  14.         LFRxDirect [-l] port cmd [cmd [ ... ]]
  15.  
  16.     with -l all arguments are send as one argument.
  17.  
  18.     History:
  19.  
  20.         13-12-1993  V1.0
  21.         18-02-1994  v1.1 add -l option
  22.  
  23.  *****************************************************************************/
  24. #include <LF.h>     // my own include file for LF.lib and handling DiceConfig stuffs
  25. #include <string.h>
  26. #include <proto/exec.h>
  27. #include <proto/dos.h>
  28. #include <clib/alib_protos.h>
  29.  
  30. static struct rexxmsg {
  31.         struct Message cm_Node;
  32.         LONG   RFU1;
  33.         LONG   RFU2;
  34.         LONG   rm_Action;
  35.         LONG   rm_Result1;
  36.         LONG   rm_Result2;
  37.         char   *cm_Args[16];
  38.         LONG   RFU7;
  39.         LONG   RFU8;
  40.         LONG   RFU9;
  41.         LONG   RFU10;
  42.         LONG   RFU11;
  43.         LONG   RFU12;
  44. } mymsg;
  45.  
  46. void send_rx(char *rx_prt,char *msg){
  47.     struct MsgPort *prt,*reply;
  48.  
  49.     #ifdef DEBUG
  50.         printf("prt: '%s'\ncom: '%s'\n",rx_prt,msg);
  51.     #endif
  52.  
  53.     if(!(prt = FindPort(rx_prt))){
  54.         LFatal("Can't find port !");
  55.         exit(20);
  56.     } else {
  57.         mymsg.cm_Node.mn_Node.ln_Type = NT_MESSAGE;
  58.         mymsg.cm_Node.mn_Length = sizeof(struct rexxmsg);
  59.         mymsg.rm_Action = 0 ;
  60.         if (!(reply = CreatePort(NULL, 0L))){
  61.             LFatal("Unable to Create reply port");
  62.             exit(20);
  63.         } else {
  64.             mymsg.cm_Node.mn_ReplyPort = reply;
  65.             mymsg.cm_Args[0] = msg;
  66.             PutMsg(prt, &mymsg.cm_Node);
  67.             WaitPort(reply);
  68.  
  69.             DeletePort(reply);
  70.         }
  71.     }
  72. }
  73.  
  74. void main(int ac, char **av){
  75.     int i;
  76.  
  77.     OS2_0();    // OS2.0 is needed because of use of GetArgStr().
  78.  
  79.     if(ac<3){
  80.         puts(" LFRxDirect v1.1 by LFSoft 1993-94\nSyntax :\n"
  81.             "LFRxDirect [-l] port cmd [cmd [ ... ]]");
  82.         exit(5);
  83.     } else if(!strcmp(av[1],"-l")){
  84.         char *x;
  85.  
  86.         if(ac<4){
  87.             puts(" LFRxDirect v1.1 by LFSoft 1993-94\nSyntax :\n"
  88.                 "LFRxDirect [-l] port cmd [cmd [ ... ]]");
  89.             exit(5);
  90.         } else if(x=strdup(GetArgStr())){
  91.             int i;
  92.             while(*x && (*x==' ' || *x=='\t')) x++; // ' '
  93.             while(*x && *x!=' ' && *x!='\t') x++; // jump -l
  94.             while(*x && (*x==' ' || *x=='\t')) x++; // ' '
  95.             while(*x && *x!=' ' && *x!='\t') x++; // jump the port name
  96.             while(*x && (*x==' ' || *x=='\t')) x++; // ' '
  97.             if(i=strlen(x)) if(x[i-1]=='\n') x[i-1]=0;
  98.  
  99.             send_rx(av[2],x);
  100.         }
  101.     } else
  102.         for(i=2; i<ac; i++)
  103.             send_rx(av[1],av[i]);
  104. }
  105.